function debounce(f, delay) {
  let timer;
  // 这里返回一个函数, 可以想象成一个btn按钮, 在按钮的点击监听事件中, 会再次调用这个返回的函数
  return function () {
    // 这里的this指的是btn
    let _this = this;
    // 传递的参数
    let arr = arguments;
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      f.call(_this, ...arr);
    }, delay);
  };
}
